統合脅威管理のSophosでVPCのNATインスタンスを置き換える
みなさんSophos UTMはお使いでしょうか? 小山はVPC上のSophos UTMで白米3杯とか楽勝なんじゃないかと信じています。Sophos UTMなんて聞いたこともないという方は、まず過去記事からどうぞ。
AWS上で Sophos UTM 9 の Web Application Firewall (WAF) を使ってSQLインジェクション攻撃を検出・防御してみた
クラウドHA-WAFパターン:SOPHOS UTM9 on Amazon VPCで高可用性のWAFを構築
「これやばいやつかも」みたいなことを感じた方には、これからする話もきっと楽しんでもらえるんでないかと思います。
前提
VPC上のEC2インスタンスで自身のパブリックIP (or EIP) 無しにインターネットへ出たい場合、どうしても別にNATインスタンスを配置してアドレス変換だとかIPマスカレードだとかを任せる必要が出てきます。それが上の図で赤く囲った部分ですが、基本的には何ということのないEC2インスタンスです。ちょっとモッタイナイですよね、 パブリックIPを肩代わりさせたいだけなのに。だから、本当のオススメはAuto-assignなパブリックIPをそれぞれのインスタンスにつけてやることです。インバウンドのセキュリティはセキュリティグループで担保できますし、EIPじゃありませんから普通は組織を特定されることも無いはずです。
でも、VPC上にSophos UTMがあったらどうでしょうか。Sophos UTMにはリモートアクセス(VPN)の機能だってあります。iPhoneで好きなAWSリージョンに「参加」できたらいいと思ったことありませんか? Sophos UTMでNATとしての役割を兼ねれば、そういうことがシームレスにできてしまいます。ですから今回はSophos UTMの設置からNATとしての動作までだけご紹介しますが、今後はもっと夢のあることを試していきたいと思っています。
準備
準備として、図のようなVPCを用意します。画面左のサブネットはプライベートサブネットとし、IGWへの経路が無いルートテーブルを設定してください。画面右はパブリックとし、IGWへの経路を教えてあげます。ここまでは、VPCウィザードで "VPC with Public and Private Subnets" を選び、できあがったVPCから件のNATインスタンスをTerminateしちゃえば簡単にできるはず。CFnのテンプレートは間に合いませんでした!
Sophosのインスタンスは順を追って配置したいので、この段階では両サブネットにWindows Serverのインスタンスだけ1つづつ用意します。パブリックのサブネットに配置したWindows ServerでRemote Desktop Gatewayを構成すれば、神経質な環境からもHTTPSでリモートデスクトップできます! (詳細はこちら)。
Sophos UTM 9の購読
マネジメントコンソールにサインインした状態でこのページを開くと、Hourlyプランの費用が見えるはずです。Annualプランでなければ実際にインスタンスを起動するまで費用は発生しませんから、オレンジの "Continue" ボタンで購読しちゃってください。これで準備万端です。
Sophos UTM 9の起動
いよいよ起動します。このページを開いて、かならずManual Launchで起動してください。1-Click Launchで使われるCFnテンプレートだとよくわからないことになるからです。
起動先のサブネットはパブリック、セキュリティグループはVPCとMy IPに対して全開 (All traffic - 172.16.0.0/16, All traffic - My IP) としておきます。新しいEIPを関連付けて、Aレコードで自分のドメインに登録することも忘れないでください! これをやっておかないと、設定画面で指定するホスト名を後で書き換える羽目になったりして詰みます。
WebAdmin
WebAdmin https://my.virtual.appliance:4444/
インスタンスが起動できたら、WebAdminを開きます。基本設定の画面になるはずですから、Hostname: に外部のDNSサーバーで解決できるFQDNを入れてください。マネジメントコンソールから見えるパブリックDNSでも動きますが、きっと後悔しますよ。AWS Instance ID: には、起動したEC2のインスタンスIDを入れます。
基本設定が済んで、こんな感じの画面になれば成功です。わくわくしますね。
Firewall
Sophosのファイアウォールには、最初から定義されている項目というものがありません。小山はここでハマりました... 左側のメニューから Network Protection > Firewall > New Rule... の順でクリックし、新しいAllowルールを作成してやる必要があったんです。(3)のアイコンをクリックすると左側にオブジェクトリストが表示され、事前に定義しておいたネットワークやサービス、インターフェイスをDND(ドラッグアンドドロップ)で指定することができます。
通常はAny (Sources) - Any (Services) - Any (Destinations) で問題ありませんが、今回はVPC(のCIDR)をSourcesに追加してみましょう。ここにはいずれ、VPNクライアント用のアドレスプールなども入れていくことになります。
Definitions and Users > Network Definitions > New Network Definition... の順でクリックし、ネットワーク定義として「VPC (172.16.0.0/16)」を追加します。
ルール編集画面に戻り、Sourcesへ追加してやりましょう。DNDの透かしがある項目には、オブジェクトリスト(ここではNetworks)から既存の定義をドラッグすることができます。オブジェクトリストが利用可能な場面では、フォルダアイコンが表示されます。
Sophos UTM 9では、さまざまな機能やルールをトグルスイッチで有効化/無効化できます。作成したルールは忘れずに有効化しておきましょう!
Masquerading
いよいよNATインスタンスとして設定してみます。Network Protection > NAT > Masquerading > New Masquerading Rule... の順でクリックし、ネットワークとしてVPC (172.16.0.0/16)、インターフェイスとしてInternalを指定します。保存、有効化したらWebAdmin上の作業は終了です。
Route Table
Sophos UTMの設定が終わったら、プライベートのサブネットが使用するルートテーブルにインターネットへのルートを追加しましょう。たったこれだけ。簡単でしょう!
テスト
繋がりません。
すっかり忘れていました。EC2では、送信元(IP)/送信先(IP)がデフォルトでチェックされます。今回は自身のIPアドレスに宛てられたトラフィック以外のトラフィックも捌けなくてはいけませんから、Source/Destination Checkを無効にしましょう。
やりました!!!
おわりに
今回は標準的なNATインスタンスを置き換えるために必要な手順だけ見てきましたが、Sophos UTMにはもっと魅力的な機能がたくさん用意されています。そのうちいくつかもご紹介する予定ですから、おたのしみに!